<?php

namespace app\api\logic;


use app\common\cache\ConfigCache;
use app\common\utils\Utils;
use think\Db;
use think\exception\ValidateException;

/**
 * 平台管理
 */
class Platform
{

    /**
     * 单例对象
     */
    protected static $instance;
    protected $key;
    protected static $master = [
        // 数据库类型
        'type'        => 'mysql',
        // 数据库连接DSN配置
        'dsn'         => '',
        // 服务器地址
        'hostname'    => '47.104.65.211',
        // 数据库名
        'database'    => 'sassback',
        // 数据库用户名
        'username'    => 'sassback',
        // 数据库密码
        'password'    => '123456',
        // 数据库连接端口
        'hostport'    => '3306',
        // 数据库连接参数
        'params'      => [],
        // 数据库编码默认采用utf8
        'charset'     => 'utf8',
        // 数据库表前缀
        'prefix'      => 'hz_',
    ];
    static $base = [
        'cdnurl' => '',
        'version' => '1.0.1',
        'timezone' => 'Asia/Shanghai',
        'forbiddenip' => '',
        'languages' =>
            array (
                'backend' => 'zh-cn',
                'frontend' => 'zh-cn',
            ),
        'fixedpage' => 'dashboard'
    ];
    /**
     * 初始化
     * @access public
     */
    public static function instance()
    {
        if (is_null(self::$instance)) {
            self::$instance = new static();
        }

        return self::$instance;
    }

    /**
     * 构造函数
     * @param int $platform_id
     */
    public function __construct()
    {

    }

    public function setKey($key) {
        $this->key = $key;

        return $this;
    }
    /**
     * 合并配置参数
     * backent 初始化方法用到
     */
    public  function combineConfig($auth) {
        if ($auth->isLogin()) {
            //同步site数据 这个地方已经有数据库地址
            ConfigCache::instance($this->key)->refreshFile();
        } else {
            config('site', self::$base);
        }
    }

    /**
     * 获取总平台列表
     */
    public static function getPlatform($where = []) {
        $db = Db::connect(self::$master);
        $where['switch'] = 1;
        $list = $db->name('platform')->where($where)->field('content', true)->select();

        foreach ($list as $k => &$v) {
            $v['image'] = cdnurl($v['image'], config('sassadmin.url'));
        }
        return $list;
    }

    /**
     * 加密登陆标识
     */
    public function encode($token = '') {
        $str = $this->key . '_' . $token;

        return base64_encode($str);
    }

    /**
     * 解密 并且同步数据库信息
     */
    public function decode($str) {
        $str1 = base64_decode($str);
        $arr = Utils::explodeStr($str1, '_');
        $key = $arr[0];
        $token = $arr[1];

        //同步数据库信息
        $this->key = $key;
        return [
            'key' => $key,
            'token' => $token
        ];
    }

    /**
     * 平台鉴权方法 已合并数据库
     */
    public function checkAuth($str) {
        $res = $this->decode($str);

        $key = $res['key'];
        if (!$key) {
            throw new ValidateException('请先选择平台');
        }
        define('PLATFORM_KEY', $key);
        //合并数据库 合并站点信息
        ConfigCache::instance($key)->refreshFile();
    }
}
